<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // - 关于this
    //  箭头函数没有自己的this，箭头函数内部的this并不是调用时候指向的对象,而是定义时指向的对象
    // window.username = "window"
    // // console.log(this===window);//true 顶级对象window
    // {
    //     // console.log(this===window);// true
    //     const obj = {
    //         username:"obj",
    //         fn:function(){
    //             console.log(this.username);
    //         },
    //         fn2(){
    //             console.log(this.username)
    //         },
    //         // 判断箭头函数中的this是谁，看如何定义。判断非箭头函数中的this是谁，看如何调用
    //         // 箭头函数自身没有this
    //         fn3:()=>{
    //             console.log(this.username);
    //         }
    //     }
    //     obj.fn();// obj
    //     obj.fn2();// obj
    //     obj.fn.call(window);// window
    //     obj.fn3();// window
    // }






    // - 箭头函数不能用于构造函数，也就是不能使用new关键字调用
    {
        // es5
        // const Box = function(username){
        //     this.username = username;
        // }
        // const obj = new Box("wangwu");
        // console.log(obj);

        // 箭头函数
        // const Box = username=>this.username = username
        // const obj = new Box("wangwu");
        // console.log(obj);
    }
    // - 箭头函数没有arguments对象
    // {
    //     // es5
    //     // const fn = function(){
    //     //     console.log(arguments[0]);
    //     // }
    //     // fn(1,2,3,4,5,6);
    //
    //     // 箭头函数
    //     const fn = ()=>{
    //         console.log(arguments[0]);
    //     }
    //     fn(1,2,3,4,5,6);
    // }
    // - 箭头函数使用call apply bind
    {
        window.num = 20;
        const obj = {
            num:1
        }
        const fn = ()=>{
            return this.num+100;
        }
        console.log(fn.call(obj));
    }
</script>
</html>